home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
redakcyjne
/
programy
/
Weather Watcher Live 6.1.23
/
WWL6123.exe
/
{app}
/
Skins
/
Interface
/
Splendid2
/
Includes
/
DragDIV.js
< prev
next >
Wrap
Text File
|
2008-09-07
|
5KB
|
210 lines
//********************************************
//* Global object to hold drag information *
//********************************************
var dragObj = new Object();
var dragLastTime;
var dragLastX;
var dragDirection;
var dragging = false;
var dragDistance;
var creeping = false;
var oldX;
var isIE7 = ((navigator.userAgent).indexOf('MSIE 7.0') > -1);
function GetCurrentTime()
{ var my_current_timestamp;
my_current_timestamp = new Date();
return my_current_timestamp.getTime();
}
function dragStart(event, id)
{ dragging = true;
//*************************
//* Disable nice titles *
//*************************
supressNiceTitles = true;
var el, x;
dragObj.elNode = document.getElementById(id);
// Get cursor position with respect to the page.
x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
dragLastX = x;
// Save starting positions of cursor and element.
dragObj.cursorStartX = x;
dragObj.elStartLeft = parseInt(dragObj.elNode.style.left, 10);
// Capture mousemove and mouseup events on the page.
document.attachEvent("onmousemove", dragGo);
document.attachEvent("onmouseup", dragStop);
window.event.cancelBubble = true;
window.event.returnValue = false;
}
function dragGo(event)
{ var x;
// Get cursor position with respect to the page.
x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
// Move drag element by the same amount the cursor has moved.
dragIt(x, false);
window.event.cancelBubble = true;
window.event.returnValue = false;
dragLastTime = GetCurrentTime();
if (x > dragLastX)
{ dragDirection = "R";
dragDistance = x - dragLastX;
}
else
{ dragDirection = "L";
dragDistance = dragLastX - x;
}
dragLastX = x;
}
function dragIt(x, calledFromCreeper)
{ if (calledFromCreeper == true)
{ if (creeping == false)
{ return;
}
else
{ if (oldX != undefined)
{ if (dragDirection == "L")
{ if (oldX < x) return;
}
else
{ if (oldX > x) return;
}
}
oldX = x;
}
}
if (dragObj.elNode.scrollWidth > document.body.clientWidth)
{ if (((parseInt(dragObj.elStartLeft) + x - dragObj.cursorStartX) + dragObj.elNode.scrollWidth) < document.body.clientWidth)
{ dragObj.elNode.style.left = (document.body.clientWidth - dragObj.elNode.scrollWidth - 7) + "px";
dragObj.elNode.style.top = dragObj.elNode.style.top;
}
else if (parseInt(dragObj.elStartLeft) + x - dragObj.cursorStartX > 32)
{ dragObj.elStartLeft = "32" + "px";
dragStop(event);
}
else
{ try
{ dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
dragObj.elNode.style.top = dragObj.elNode.style.top;
}
catch(err)
{ if (dragging == true)
{ dragStop(event);
dragObj.elStartLeft = "32px";
}
}
}
}
}
function dragStop(event)
{ dragging = false;
//*************************************************
//* Stop capturing mousemove and mouseup events *
//*************************************************
document.detachEvent("onmousemove", dragGo);
document.detachEvent("onmouseup", dragStop);
if (isIE7 == true)
{ if ((GetCurrentTime() - dragLastTime) < 50)
{ dragCreep();
}
else
{ //***************************
//* Re-enable nice titles *
//***************************
supressNiceTitles = false;
}
}
else
{ if ((GetCurrentTime() - dragLastTime) < 40)
{ dragCreep();
}
else
{ //***************************
//* Re-enable nice titles *
//***************************
supressNiceTitles = false;
}
}
}
function dragCreep()
{ if (dragging == true) return;
creeping = true;
var creepTime;
var creepDistance;
var creepStep;
var x = dragLastX;
if (isIE7 == true)
{ creepTime = 30;
creepStep = 2;
if (dragDistance < 10)
creepDistance = 14;
else if (dragDistance < 20)
creepDistance = 30;
else if (dragDistance < 30)
creepDistance = 40;
else
creepDistance = 50;
}
else
{ creepTime = 20;
creepStep = 3;
if (dragDistance < 5)
creepDistance = 10;
else if (dragDistance < 10)
creepDistance = 20;
else if (dragDistance < 20)
creepDistance = 30;
else if (dragDistance < 30)
creepDistance = 40;
else
creepDistance = 50;
}
while (creepDistance > 0)
{ if (creeping == false) return;
if (dragDirection == "L")
x = x - creepDistance;
else
x = x + creepDistance;
creepDistance = creepDistance - creepStep;
if (creepDistance <= 0)
{ //***************************
//* Re-enable nice titles *
//***************************
setTimeout("supressNiceTitles = false", creepTime);
return;
}
setTimeout("dragIt(" + x + ",true)", creepTime);
creepTime = creepTime + 30;
}
}